/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package carreras.datos;

import carreras.datos.connection.DBConnector;
import carreras.datos.connection.Data;
import carreras.entidades.CarrilCarrera;
import carreras.logger.CarrerasLogger;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 *
 * @author fanky10
 */
public class Carrera extends Data {
    public void addCarrera(carreras.entidades.CarrilesCarrera carriles) throws SQLException{
        ArrayList<String> queryV = new ArrayList<String>();
        for(carreras.entidades.CarrilCarrera cc: carriles){
            for(carreras.entidades.TipoTiempo tt: cc.getTiempos()){
                queryV.add("INSERT INTO carrera (id_corredor, id_auto,fecha_hora, nro_carril,tipo_tiempo, tiempo) values "
                        + "("+cc.getCorredor().getId()+","+cc.getAuto().getId()+",current_timestamp,"+cc.getNro_carril()+","
                        + tt.getId()+","+DBConnector.traduce_nro(tt.getTiempo())
                        +")");
            }
        }
        //for test...
//        queryV.add("ins");
        try{
            db.startTransaction();
            for(String q: queryV){
                db.executeUpdate(q);
            }
            db.commitTransaction();
        }catch(SQLException ex){
            //termino tirando la exception para que las capas superiores se enteren,
            //pero manteniendo la atomicidad de datos
            String elevamensaje = ex.getMessage();
            try{
                db.rollbackTransaction();
                CarrerasLogger.info(Carrera.class, "operation succefully rollbacked, caused: "+ex.getMessage());
            }catch(SQLException rollback){
                System.out.println("operation could not be rollbacked!");
                System.out.println("message: "+rollback.getMessage());
            }
            throw new SQLException(elevamensaje);
        }
    }

    public void addCarrilCarrera(CarrilCarrera c) throws SQLException{
        ArrayList<String> queryV = new ArrayList<String>();
        for(carreras.entidades.TipoTiempo tt: c.getTiempos()){
            queryV.add("INSERT INTO carrera (id_corredor, id_auto,fecha_hora, nro_carril,tipo_tiempo, tiempo) values "
                    + "("+c.getCorredor().getId()+","+c.getAuto().getId()+",current_timestamp,"+c.getNro_carril()+","
                    + tt.getId()+","+DBConnector.traduce_nro(tt.getTiempo())
                    +")");
        }
        try{
            db.startTransaction();
            for(String q: queryV){
                db.executeUpdate(q);
            }
            db.commitTransaction();
        }catch(SQLException ex){
            //termino tirando la exception para que las capas superiores se enteren,
            //pero manteniendo la atomicidad de datos
            String elevamensaje = ex.getMessage();
            try{
                db.rollbackTransaction();
                CarrerasLogger.info(Carrera.class, "operation succefully rollbacked, caused: "+ex.getMessage());
            }catch(SQLException rollback){
                System.out.println("operation could not be rollbacked!");
                System.out.println("message: "+rollback.getMessage());
            }
            throw new SQLException(elevamensaje);
        }
        
    }

    public void addNuevoTiempo(carreras.entidades.Carrera c,CarrilCarrera cc)throws SQLException{
        //selecciono la ultima insc. LA ULTIMA CARRERA NO! xD
        //si la carrera no tiene id, se lo generamos
    }
}
